package com.hqq.concurrency.reactor.framework;

import java.nio.channels.SelectionKey;

/**
 * Dispatcher
 * 当{@link NIOReactor}监听到在{@link AbstractNIOChannel} 上注册的读操作事件发生时
 * 就会调用{@link Dispatcher}转发到相应的{@link ChannelHandler}进行处理 减少IO操作带来的阻塞
 * Created by heqianqian on 2017/8/5.
 */
public interface Dispatcher {

    /**
     * 钩子方法
     * 当读事件发生时转发到相应的Handler进行处理
     *
     * @param channel      发生事件的通道
     * @param data         封装了读数据
     * @param selectionKey 发生的事件
     */
    void onChannelReadEvent(AbstractNIOChannel channel, Object data, SelectionKey selectionKey);


    /**
     * 停止操作 清理资源[example:threads]
     */
    void stop() throws InterruptedException;

}
